package com.lsl.factory_method.example.framework;


/**
 *
 * 这个类中使用了Template Method模式
 * 声明了用于"生成产品"的createProduct抽象方法和用于"注册产品"的registerProduct抽象方法
 * 具体处理由Factory类的子类负责
 *
 *
 * 工厂通过调用create方法生成product实例
 * 而create方法的实现是先调用createProduct生成产品,然后调用registerProduct注册产品
 *
 * @author Zed
 * @description
 * @date 2022/10/31 23:16
 */
public abstract class Factory {
    protected abstract Product createProduct(String owner);

    protected abstract void registerProduct(Product product);

    public final Product create(String owner) {
        Product product = createProduct(owner);
        registerProduct(product);
        return product;
    }
    //Creator创建者
    /**
     * 负责生成Product角色的抽象类。但具体的处理由子类ConcreteCreator角色决定
     * Creator角色对于实际负责生成实例的ConcreteCreator角色一无所知，
     * 它唯一知道的就是，只要调用Product角色和生成实例的方法就可以生成Product实例。
     */
    //不用new关键字来生成实例，而是调用生成实例的专用方法create()来生成实例，这样可以防止父类和其他具体类耦合
}
